import { defineStore } from 'pinia';
import { login } from "@/apis/user.js";
import { mergeCartInfo } from '@/apis/cart';
import { ref } from 'vue';
import { useCartStore } from "@/stores/cartStore";

export const useUserStore = defineStore('user',
    () => {

        // 获取购物车store
        const cartStore = useCartStore();

        // 1. 定义管理用户数据的state
        const userInfo = ref({});

        // 2. 定义获取接口数据的action函数
        const getUserInfo = async ({ account, password }) => {
            const res = await login({ account, password });
            console.log("函数执行了2", res);
            userInfo.value = res.result;

            // 合并本地购物车与远程购物车数据
            // 遍历购物车数据，获得每个商品信息的skuId、selected、count
            // store中返回出的数据会变为reactive对象
            const goodsInfo = cartStore.cartList.map((item) => {
                return {
                    skuId: item.skuId,
                    selected: item.selected,
                    count: item.count
                }
            });
            await mergeCartInfo(goodsInfo);
            cartStore.getNewCartList();
        }

        // 退出登录时，清空用户数据
        const clearUserInfo = () => {
            userInfo.value = {};

            // 清空购物车数据
            cartStore.clearCart();
        }
        // 3. 以对象的格式将 state 和 action return
        return {
            userInfo,
            getUserInfo,
            clearUserInfo
        }
    },
    {
        persist: true
    }
);